/*
 * @Author: your name
 * @Date: 2021-08-27 10:01:15
 * @LastEditTime: 2021-08-29 17:00:35
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \briup\5-javascript\day05\2-构造函数.js
 */


//函数命名：小驼峰（sayName()）  普通函数 功能：封装功能，执行代码块
//函数命名：大驼峰(Object String Date)  构造函数

function Dog() {
    this.name = '狗剩'
        // var name = '狗剩';//作用域是函数内部
    console.log(this.name);
}
var result = Dog(); //狗剩  普通函数使用
console.log(result); // undefined 没有返回值return 说明result只声明没有定义
var d1 = new Dog(); //狗剩  new构造 （）执行
console.log(d1); //Dog { name: '狗剩' } 构造函数的输出

function Cat(name) {
    // this.name = arguments['0'];
    this.name = name;
}
var c1 = new Cat('小花');
var c2 = new Cat('小白');
console.log(c1, c2);


//重写toString方法
c1.price = 1000;
c1.age = 200;
//c1新增toString:c1所有的可枚举的属性都能返回成字符串
c1.toString = function() {
    var str = " ";
    for (var key in this) {
        var value = this[key];
        str += value;
    }
    return str;
}
console.log(c1.toString());

//c2想用c1的toString函数
console.log(c2.toString()); //[object Object]
console.log(c1.toString.apply(c2));